home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / WINDOWS / LENGINE.ZIP / FILEIO.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-11  |  11.0 KB  |  298 lines

  1. #include "header.h"
  2.  
  3. extern DirectDraw *DD;
  4. extern BYTE GVects[256][256];
  5. int GetLine(char *buff, int n, FILE *in);
  6.  
  7. int WORLD::LoadWorld(char *filename)
  8. {
  9.         FILE    *fp;
  10.         char    buf[100];
  11.         char    String[100];
  12.         char    String2[100];
  13.         int     i, j;
  14.  
  15.         Number_LandScapes = 0;
  16.         Number_Cameras = 0;
  17.         Number_Textures = 0;
  18. //        Number_BObjects = 0;
  19.         
  20.         fp = fopen(filename, "rt");
  21.         if(!fp)
  22.         {
  23.                 MessageBox(GetFocus(), "File error on open.",
  24.                     "Error Opening File", MB_OK | MB_ICONEXCLAMATION);
  25.                 fclose(fp);
  26.                 return -1;
  27.         }
  28.  
  29.         while(GetLine(buf, sizeof(buf), fp) != -1)
  30.         {
  31.                 sscanf(buf, "%s", String);
  32.                 for(i = 0; i < strlen(String); i++)
  33.                         String[i] = (char)toupper(String[i]);
  34.  
  35.                 if(stricmp(String, "NUMBER_LANDSCAPES") == 0)
  36.                 {
  37.                         sscanf(buf, "%*s %d", &i);
  38.                         LandScape = new LANDSCAPE[i];
  39.                 }
  40.  
  41.                 else if(stricmp(String, "NUMBER_TEXTURES") == 0)
  42.                 {
  43.                         sscanf(buf, "%*s %d", &i);
  44.                         Texture = new HDIB[i];
  45.                 }
  46.  
  47.                 else if(stricmp(String, "NUMBER_CAMERAS") == 0)
  48.                 {
  49.                         sscanf(buf, "%*s %d", &i);
  50.                         Camera = new CAMERA[i];
  51.                 }
  52.  
  53. /*                else if(stricmp(String, "NUMBER_BOBJECTS") == 0)
  54.                 {
  55.                         sscanf(buf, "%*s %d", &i);
  56.                         BitmapObj = new BITMAPOBJ[i];
  57.                 }*/
  58.  
  59.                 else if(stricmp(String, "TEXTURE") == 0)
  60.                 {
  61.                         sscanf(buf, "%*s %s", String);
  62.                         Texture[Number_Textures].Load(String);
  63.                         Number_Textures++;
  64.                 }
  65.  
  66.                 else if(stricmp(String, "LANDSCAPE") == 0)
  67.                 {
  68.                         if(!LandScape)
  69.                                 MessageBox(GetFocus(),
  70.                                     "Memory not allocated for landscapes.",
  71.                                     "Loading Error", MB_OK);
  72.  
  73.                         GetLine(buf, sizeof(buf), fp);
  74.                         sscanf(buf, "%s", String);
  75.                         if(stricmp(String, "{") != 0)
  76.                         {
  77.                                 MessageBox(GetFocus(),
  78.                                     "Error reading landscape.",
  79.                                     "Critical Error", MB_OK);
  80.                                 fclose(fp);
  81.                                 return -1;
  82.                         }
  83.  
  84.                         for(;;)
  85.                         {
  86.                                 GetLine(buf, sizeof(buf), fp);
  87.                                 sscanf(buf, "%s", String);
  88.                                 for(i = 0; i < strlen(String); i++)
  89.                                         String[i] = (char)toupper(String[i]);
  90.  
  91.                                 if(stricmp(String, "MAPS") == 0)
  92.                                 {
  93.                                         sscanf(buf, "%*s %s %s", String, String2);
  94.                                         LoadLandScapeFile(&LandScape[Number_LandScapes], String, String2);
  95.                                 }
  96.  
  97.                                 else if(stricmp(String, "SCALE") == 0)
  98.                                 {
  99.                                         sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Scaling);
  100.                                 }
  101.  
  102.                                 else if(stricmp(String, "DETAIL") == 0)
  103.                                 {
  104.                                         sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Detail);
  105.                                 }
  106.  
  107.                                 else if(stricmp(String, "DISTANCE") == 0)
  108.                                 {
  109.                                         sscanf(buf, "%*s %ld", &LandScape[Number_LandScapes].Distance);
  110.                                 }
  111.  
  112.                                 else if(stricmp(String, "POSITION") == 0)
  113.                                         sscanf(buf, "%*s %f %f %f", &LandScape[Number_LandScapes].xStart, &LandScape[Number_LandScapes].yStart, &LandScape[Number_LandScapes].zStart);
  114.  
  115.                                 else if(stricmp(String, "}") == 0)
  116.                                         break;
  117.                         }
  118.                         Number_LandScapes++;
  119.                 }
  120.  
  121. /*                else if(stricmp(String, "BOBJECT") == 0)
  122.                 {
  123.                         if(!BitmapObj)
  124.                                 MessageBox(GetFocus(),
  125.                                     "Memory not allocated for Bitmapped Objects.",
  126.                                     "Loading Error", MB_OK);
  127.  
  128.                         GetLine(buf, sizeof(buf), fp);
  129.                         sscanf(buf, "%s", String);
  130.                         if(stricmp(String, "{") != 0)
  131.                         {
  132.                                 MessageBox(GetFocus(),
  133.                                     "Error reading bitmap object.",
  134.                                     "Critical Error", MB_OK);
  135.                                 fclose(fp);
  136.                                 return -1;
  137.                         }
  138.  
  139.                         for(;;)
  140.                         {
  141.                             GetLine(buf, sizeof(buf), fp);
  142.                             sscanf(buf, "%s", String);
  143.                             for(i = 0; i < strlen(String); i++)
  144.                                 String[i] = (char)toupper(String[i]);
  145.  
  146.                             if(stricmp(String, "TEXTURE") == 0)
  147.                             {
  148.                                    sscanf(buf, "%*s %d", &i);
  149.                                 BitmapObj[Number_BObjects].Texture = i - 1;
  150.                             }
  151.  
  152.                             else if(stricmp(String, "VERTEX1") == 0)
  153.                             {
  154.                                 sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[0].ox,
  155.                                                                   &BitmapObj[Number_BObjects].Vertex[0].oy,
  156.                                                                   &BitmapObj[Number_BObjects].Vertex[0].oz,
  157.                                                                   &BitmapObj[Number_BObjects].TextPt[0].x,
  158.                                                                   &BitmapObj[Number_BObjects].TextPt[0].y);
  159.                             }
  160.  
  161.                             else if(stricmp(String, "VERTEX2") == 0)
  162.                             {
  163.                                 sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[1].ox,
  164.                                                                   &BitmapObj[Number_BObjects].Vertex[1].oy,
  165.                                                                   &BitmapObj[Number_BObjects].Vertex[1].oz,
  166.                                                                   &BitmapObj[Number_BObjects].TextPt[1].x,
  167.                                                                   &BitmapObj[Number_BObjects].TextPt[1].y);
  168.                             }
  169.  
  170.                             else if(stricmp(String, "VERTEX3") == 0)
  171.                             {
  172.                                 sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[2].ox,
  173.                                                                   &BitmapObj[Number_BObjects].Vertex[2].oy,
  174.                                                                   &BitmapObj[Number_BObjects].Vertex[2].oz,
  175.                                                                   &BitmapObj[Number_BObjects].TextPt[2].x,
  176.                                                                   &BitmapObj[Number_BObjects].TextPt[2].y);
  177.                             }
  178.  
  179.                             else if(stricmp(String, "VERTEX4") == 0)
  180.                             {
  181.                                 sscanf(buf, "%*s %f %f %f %d %d", &BitmapObj[Number_BObjects].Vertex[3].ox,
  182.                                                                   &BitmapObj[Number_BObjects].Vertex[3].oy,
  183.                                                                   &BitmapObj[Number_BObjects].Vertex[3].oz,
  184.                                                                   &BitmapObj[Number_BObjects].TextPt[3].x,
  185.                                                                   &BitmapObj[Number_BObjects].TextPt[3].y);
  186.                             }
  187.                             else if(stricmp(String, "}") == 0)
  188.                                 break;
  189.                         }
  190.                         BitmapObj[Number_BObjects].Number_Vertices = 4;
  191.                         BitmapObj[Number_BObjects].Color = 1;
  192.                         Number_BObjects++;
  193.                 }*/
  194.  
  195.                 else if(stricmp(String, "CAMERA") == 0)
  196.                 {
  197.                         if(!Camera)
  198.                             MessageBox(GetFocus(),
  199.                                 "Memory not allocated for cameras.",
  200.                                 "Enigmatic Experience", MB_OK);
  201.  
  202.                         GetLine(buf, sizeof(buf), fp);
  203.                         sscanf(buf, "%s", String);
  204.                         if(stricmp(String, "{") != 0)
  205.                         {
  206.                                 MessageBox(GetFocus(), "Error reading camera.", "Critical Error", MB_OK);
  207.                                 fclose(fp);
  208.                                 return -1;
  209.                         }
  210.  
  211.                         for(;;)
  212.                         {
  213.                                 GetLine(buf, sizeof(buf), fp);
  214.                                 sscanf(buf, "%s", String);
  215.                                 for(i = 0; i < strlen(String); i++)
  216.                                         String[i] = (char)toupper(String[i]);
  217.  
  218.                                 if(stricmp(String, "ANGLE") == 0)
  219.                                     sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xAngle,&Camera[Number_Cameras].yAngle,&Camera[Number_Cameras].zAngle);
  220.  
  221.                                 else if(stricmp(String, "SCALE") == 0)
  222.                                     sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xScale,&Camera[Number_Cameras].yScale,&Camera[Number_Cameras].zScale);
  223.  
  224.                                 else if(stricmp(String, "TRANSLATE") == 0)
  225.                                     sscanf(buf, "%*s %f %f %f", &Camera[Number_Cameras].xTrans,&Camera[Number_Cameras].yTrans,&Camera[Number_Cameras].zTrans);
  226.  
  227.                                 else if(stricmp(String, "}") == 0)
  228.                                         break;
  229.                         }
  230.                         Number_Cameras++;
  231.                 }
  232.         }
  233.  
  234.     Current_Camera = 0;
  235.     j = 0;
  236.     for(i = 0; i < Number_LandScapes; i++)
  237.         j += X_DIR * 2 * Z_DIR * 2;
  238.     PolyList = new POLYGON[j];
  239.     Number_Polygons = 0;
  240.     fclose(fp);
  241.     WorldOpen = TRUE;
  242.     return 1;
  243. };
  244.  
  245. int WORLD::LoadLandScapeFile(LANDSCAPE *l, char *RAWFile1, char *RAWFile2)
  246. {
  247.     FILE    *fp, *fp2;
  248.     int        i, j;
  249.     int        c;
  250.     int        width, height;
  251.  
  252.     fp = fopen(RAWFile1, "rb");
  253.     fp2 = fopen(RAWFile2, "rb");
  254.     if(!fp) return 0;
  255.     if(!fp2) return 0;
  256.  
  257.     fread((BYTE *)ImageMap, 65536, 1, fp2);
  258.     l->Width = 256; l->Height = 256;
  259.     width = 256; height = 256;
  260.     l->Number_Vertices = width * height;
  261.     l->Vertex = new VERTEX[l->Number_Vertices];
  262.  
  263.     for(i = 0; i < height; i++)
  264.     {
  265.         for(j = 0; j < width; j++)
  266.         {
  267.             l->Vertex[i * width + j].ox = j * 1024;
  268.             c = fgetc(fp);
  269.             l->Vertex[i * width + j].oy = c * -50;
  270.             l->Vertex[i * width + j].oz = i * 1024;
  271.             l->Vertex[i * width + j].Vect = GVects[i][j];
  272.         }
  273.     }
  274.  
  275.     fclose(fp);
  276.     fclose(fp2);
  277.     return 0;
  278. };
  279.     
  280. int GetLine(char *buff, int n, FILE *in)
  281. {
  282.     char *p;
  283.  
  284.     do
  285.     {
  286.         if (fgets(buff, n, in) == 0)
  287.             return -1;
  288.         if ((p = strchr(buff, '\n')) != NULL)
  289.             *p = '\0';
  290.         if ((p = strchr(buff, ';')) != NULL)
  291.             *p = '\0';
  292.         for (p = buff; isspace(*p); ++p);
  293.     } while (p[0] == '\0');
  294.  
  295.     return 0;
  296. };
  297.  
  298.